home *** CD-ROM | disk | FTP | other *** search
/ Windows Expert / Windows Expert.iso / windownt / trash.zip / TRASH.C < prev    next >
C/C++ Source or Header  |  1993-06-16  |  11KB  |  313 lines

  1.  
  2. /*     TRASH   Version 1.00.07   4/16/93    */
  3.  
  4. #include "windows.h"
  5. #include "TRASH.h"
  6.  
  7. FARPROC lpAbortDlg, lpAbortProc;
  8.  
  9. PAINTSTRUCT ps;
  10. POINT p;
  11. RECT Rect;
  12.  
  13. HANDLE hAccTable;
  14. HANDLE hBtNukecWnd;
  15. HANDLE hBtNukeaWnd;
  16. HANDLE hBtNuketWnd;
  17. HANDLE hBtExitWnd;
  18. HANDLE hBtNukeNowWnd;
  19. HANDLE hBtNukeClsWnd;
  20. HANDLE hBtNukeConWnd;
  21. HANDLE hBtHelpWnd;
  22. HANDLE hDrop;
  23. HANDLE hDummy;
  24. HANDLE hInst;
  25. HDC hDC;
  26. HPEN hPen;
  27. HWND hwnd;
  28. HWND hEditWnd;
  29. BOOL bChanges=FALSE;
  30. BOOL bVersion=FALSE;
  31. DWORD dwResults;
  32. DWORD dwStyle;
  33. DWORD dwStyleEx;
  34. LRESULT lResult;
  35. UINT uFiles;
  36. UINT uType;
  37. UINT uType2;
  38. int iTrashX;
  39. int iTrashY;
  40. int iTrashW;
  41. int iTrashH;
  42. int Heigth;
  43. int Width;
  44. char szTemp[128];
  45. char szUserName[128];
  46.  
  47. int PASCAL WinMain(hInstance,hPrevInstance,lpCmdLine,nCmdShow)
  48. HANDLE hInstance;
  49. HANDLE hPrevInstance;
  50. LPSTR lpCmdLine;
  51. int nCmdShow;
  52. {    MSG msg;
  53.     if ( !hPrevInstance ) {
  54.         WNDCLASS    wc;
  55.         wc.style = 0;
  56.         wc.lpfnWndProc = MainWndProc;
  57.         wc.cbClsExtra = 0;
  58.         wc.cbWndExtra = 0;
  59.         wc.hInstance = hInstance;
  60.         wc.hIcon = LoadIcon ( hInstance,"Icon" );
  61.         wc.hCursor = LoadCursor ( NULL, IDC_ARROW );
  62.         wc.hbrBackground = GetStockObject(LTGRAY_BRUSH);
  63.         wc.lpszMenuName = "TRASHMenu";
  64.         wc.lpszClassName = "TRASHWClass";
  65.         if(!RegisterClass(&wc))
  66.             return(FALSE);}
  67.     hInst=hInstance;
  68.     dwResults = 80;
  69.     GetUserName( (LPTSTR) & szUserName, (LPDWORD) & dwResults );
  70.     iTrashX = GetPrivateProfileInt ( ( LPCTSTR ) & szUserName, "TrashX", 10, "Solution.ini" );
  71.     iTrashY = GetPrivateProfileInt ( ( LPCTSTR ) & szUserName, "TrashY", 20, "Solution.ini" );
  72.     iTrashW = GetPrivateProfileInt ( ( LPCTSTR ) & szUserName, "TrashW", 620, "Solution.ini" );
  73.     iTrashH = GetPrivateProfileInt ( ( LPCTSTR ) & szUserName, "TrashH", 350, "Solution.ini" );
  74.     uType2 = GetPrivateProfileInt ( ( LPCTSTR ) & szUserName, "NukeType", 2, "Solution.ini" );
  75.     if (uType2 < 3)
  76.         uType = uType2 + 1000;
  77.     else
  78.         uType = 1002;
  79.     if (uType==NUKE_NOW)
  80.         wsprintf(szTemp, "%s", "TRASH  Nuke Immediately");
  81.     if (uType==NUKE_LATER)
  82.         wsprintf(szTemp, "%s", "TRASH  Nuke on Close");
  83.     if (uType==NUKE_CHOOSE)
  84.         wsprintf(szTemp, "%s", "TRASH  Nuke on Confirm");
  85.     hAccTable=LoadAccelerators(hInst,"TRASHAcc");
  86.     dwStyle=WS_OVERLAPPEDWINDOW;
  87.     hwnd=CreateWindow("TRASHWClass", (LPTSTR)&szTemp,dwStyle, iTrashX, iTrashY, iTrashW, iTrashH, NULL,NULL,hInstance,NULL);
  88.     if(!hwnd)
  89.         return(FALSE);
  90.     dwStyle=WS_CHILD | WS_VISIBLE | LBS_HASSTRINGS |LBS_SORT | WS_VSCROLL | WS_HSCROLL ;
  91.     dwStyleEx=WS_EX_TOPMOST;
  92.     GetClientRect(hwnd,(LPRECT)&Rect);
  93.     Width=(Rect.right-Rect.left);
  94.     Heigth=(Rect.bottom-Rect.top);
  95.     hEditWnd=CreateWindowEx(dwStyleEx,"Listbox",NULL,dwStyle,0,47,Width,Heigth-47,hwnd,(HMENU)IDC_EDIT,hInst,NULL);
  96.     if ( !hEditWnd ) {
  97.         DestroyWindow ( hwnd ) ;
  98.         return ( 0 ) ; }
  99.     dwStyle = WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON;
  100.     hBtNukecWnd = CreateWindowEx ( dwStyleEx, "Button", "Remove File", dwStyle, 2, 2, 106, 20, hwnd, (HMENU)IDM_NUKEC, hInst, NULL );
  101.     hBtNukeaWnd = CreateWindowEx ( dwStyleEx, "Button", "Nuke 'em All", dwStyle, 2, 24, 106, 20, hwnd, (HMENU)IDM_NUKEA, hInst, NULL );
  102.     hBtNuketWnd = CreateWindowEx ( dwStyleEx, "Button", "Set Nuke Type", dwStyle, 110, 2, 106, 20, hwnd, (HMENU)IDM_NUKET, hInst, NULL );
  103.     hBtExitWnd = CreateWindowEx ( dwStyleEx, "Button", "Exit", dwStyle, 110, 24, 106, 20, hwnd, (HMENU)IDM_EXIT, hInst, NULL );
  104.     hBtNukeNowWnd = CreateWindowEx ( dwStyleEx, "Button", "Nuke Immediately", dwStyle, 218, 2, 136, 20, hwnd, (HMENU)IDM_NUKENOW, hInst, NULL );
  105.     hBtNukeClsWnd = CreateWindowEx ( dwStyleEx, "Button", "Nuke On Close", dwStyle, 218, 24, 136, 20, hwnd, (HMENU)IDM_NUKECLS, hInst, NULL );
  106.     hBtNukeConWnd = CreateWindowEx ( dwStyleEx, "Button", "Nuke On Confirm", dwStyle, 356, 2, 136, 20, hwnd, (HMENU)IDM_NUKECON, hInst, NULL );
  107.     hBtHelpWnd = CreateWindowEx ( dwStyleEx, "Button", "Help Me,Help Me", dwStyle, 356, 24, 136, 20, hwnd, (HMENU)IDM_HELP, hInst, NULL );
  108.     EnableWindow(hBtNukeNowWnd, FALSE);
  109.     EnableWindow(hBtNukeClsWnd, FALSE);
  110.     EnableWindow(hBtNukeConWnd, FALSE);
  111.     dwResults = GetVersion();
  112.     if (!dwResults && 0x80000000)
  113.         bVersion = TRUE;
  114.     DragAcceptFiles(hwnd, TRUE);
  115.     ShowWindow(hwnd,nCmdShow);
  116.     UpdateWindow(hwnd);
  117.     while(GetMessage(&msg,NULL,0,0)){
  118.         if(!TranslateAccelerator(hwnd,hAccTable,&msg)){
  119.             TranslateMessage(&msg);
  120.             DispatchMessage(&msg);}}
  121.     return(msg.wParam);
  122. }
  123.  
  124. long FAR PASCAL MainWndProc ( hWnd, message, wParam, lParam )
  125. HWND hWnd;
  126. UINT message;
  127. WPARAM wParam;
  128. LPARAM lParam;
  129. {    FARPROC lpProcAbout;
  130.     switch ( message ) {
  131.         case WM_COMMAND :
  132.             switch (LOWORD(wParam)){        /* THE <(LOWORD)> WAS ADDED FOR COMPATIBILITY WITH NT */
  133.                 case IDM_ABOUT :
  134.                     lpProcAbout = MakeProcInstance (About, hInst);
  135.                     DialogBox (hInst, "AboutBox", hWnd, lpProcAbout);
  136.                     FreeProcInstance (lpProcAbout);
  137.                     break;
  138.                 case IDM_HELP:
  139.                     if (bVersion)
  140.                         ShellExecute ( hWnd, NULL, "winhlp32.exe", " trash.hlp", "",SW_SHOW );
  141.                     else
  142.                         ShellExecute ( hWnd, NULL, "winhelp.exe", " trash.hlp", "", SW_SHOW ) ;
  143.                     break ;
  144.                 case IDM_NUKEC:
  145.                     lResult = SendMessage(hEditWnd, LB_GETCURSEL, 0, 0);
  146.                     SendMessage(hEditWnd, LB_DELETESTRING, (WPARAM) lResult, 0);
  147.                     lResult = SendMessage(hEditWnd, LB_GETCOUNT, 0, 0);
  148.                     if (lResult==0)
  149.                         bChanges=FALSE;
  150.                     break;
  151.                 case IDM_NUKEA:
  152.                     lResult = SendMessage(hEditWnd, LB_GETCOUNT, 0, 0);
  153.                     while (lResult){
  154.                         SendMessage(hEditWnd, LB_GETTEXT, 0, (LPARAM)(LPCTSTR)&szTemp);
  155.                         SendMessage(hEditWnd, LB_DELETESTRING, 0, 0);
  156.                         DeleteFile((LPSTR)&szTemp);
  157.                         lResult--;}
  158.                     bChanges=FALSE;
  159.                     break;
  160.                 case IDM_NUKET:
  161.                     EnableWindow(hBtNukeNowWnd, TRUE);
  162.                     EnableWindow(hBtNukeClsWnd, TRUE);
  163.                     EnableWindow(hBtNukeConWnd, TRUE);
  164.                     break;
  165.                 case IDM_NUKENOW:
  166.                     EnableWindow(hBtNukeNowWnd, FALSE);
  167.                     EnableWindow(hBtNukeClsWnd, FALSE);
  168.                     EnableWindow(hBtNukeConWnd, FALSE);
  169.                     wsprintf(szTemp, "%s", "TRASH  Nuke Immediately");
  170.                     SetWindowText(hWnd, (LPTSTR)&szTemp);
  171.                     uType = NUKE_NOW;
  172.                     break;
  173.                 case IDM_NUKECLS:
  174.                     EnableWindow(hBtNukeNowWnd, FALSE);
  175.                     EnableWindow(hBtNukeClsWnd, FALSE);
  176.                     EnableWindow(hBtNukeConWnd, FALSE);
  177.                     wsprintf(szTemp, "%s", "TRASH  Nuke on Close");
  178.                     SetWindowText(hWnd, (LPTSTR)&szTemp);
  179.                     uType = NUKE_LATER;
  180.                     break;
  181.                 case IDM_NUKECON:
  182.                     EnableWindow(hBtNukeNowWnd, FALSE);
  183.                     EnableWindow(hBtNukeClsWnd, FALSE);
  184.                     EnableWindow(hBtNukeConWnd, FALSE);
  185.                     wsprintf(szTemp, "%s", "TRASH  Nuke on Confirm");
  186.                     SetWindowText(hWnd, (LPTSTR)&szTemp);
  187.                     uType = NUKE_CHOOSE;
  188.                     break;
  189.                 case IDM_EXIT :
  190.                     if (uType == NUKE_LATER){
  191.                         lResult = SendMessage(hEditWnd, LB_GETCOUNT, 0, 0);
  192.                         while (lResult){
  193.                             SendMessage(hEditWnd, LB_GETTEXT, 0, (LPARAM)(LPCTSTR)&szTemp);
  194.                             SendMessage(hEditWnd, LB_DELETESTRING, 0, 0);
  195.                             DeleteFile((LPSTR)&szTemp);
  196.                             lResult--;}
  197.                         bChanges=FALSE;}
  198.                     if (bChanges){
  199.                         ShowWindow (hWnd, SW_RESTORE);
  200.                         MessageBox(hWnd, "There are still Files in the Trash", "Files Pending", MB_OK);
  201.                         return (FALSE);}
  202.                     p.x = 0;
  203.                     p.y = 0;
  204.                     ClientToScreen ( hWnd, (LPPOINT) & p ) ;
  205.                     iTrashX = p.x -4 ;
  206.                     iTrashY = p.y -42 ;
  207.                     GetClientRect ( hwnd, ( LPRECT) &Rect ) ;
  208.                     iTrashW = ( Rect.right - Rect.left ) + 8 ;
  209.                     iTrashH = ( Rect.bottom - Rect.top ) + 46;
  210.                     wsprintf ( szTemp, "%i", 1);
  211.                     WritePrivateProfileString ( ( LPCSTR ) & szUserName, "..", (LPCTSTR) & szTemp, "Solution.ini");
  212.                     wsprintf ( szTemp, "%i", iTrashX);
  213.                     WritePrivateProfileString ( ( LPCSTR ) & szUserName, "TrashX", (LPCTSTR) & szTemp, "Solution.ini");
  214.                     wsprintf ( szTemp, "%i", iTrashY);
  215.                     WritePrivateProfileString ( ( LPCSTR ) & szUserName, "TrashY", (LPCTSTR) & szTemp, "Solution.ini");
  216.                     wsprintf ( szTemp, "%i", iTrashH);
  217.                     WritePrivateProfileString ( ( LPCSTR ) & szUserName, "TrashH", (LPCTSTR) & szTemp, "Solution.ini");
  218.                     wsprintf ( szTemp, "%i", iTrashW);
  219.                     WritePrivateProfileString ( ( LPCSTR ) & szUserName, "TrashW", (LPCTSTR) & szTemp, "Solution.ini");
  220.                     wsprintf ( szTemp, "%i", uType - 1000);
  221.                     WritePrivateProfileString ( ( LPCSTR ) & szUserName, "NukeType", (LPCTSTR) & szTemp, "Solution.ini");
  222.                     DestroyWindow ( hWnd ) ;
  223.                     break ;
  224.                 default :
  225.                     return ( DefWindowProc ( hWnd, message, wParam, lParam ) ) ; }
  226.             return (0);
  227.         case WM_PAINT:
  228.             hDC = BeginPaint(hwnd, (LPPAINTSTRUCT)&ps);
  229.             MoveToEx(hDC, 0, 46, NULL);
  230.             hPen = SelectObject(hDC, (HGDIOBJ)GetStockObject(BLACK_PEN));
  231.             LineTo(hDC, 620, 46);
  232.             EndPaint(hwnd, (LPPAINTSTRUCT)&ps);
  233.             break;
  234.         case WM_DROPFILES:
  235.             if(uType == NUKE_NOW)
  236.                 bChanges=FALSE;
  237.             else
  238.                 bChanges=TRUE;
  239.             hDrop = (HANDLE) wParam;
  240.             uFiles = DragQueryFile (hDrop, 0xffffffff, (LPTSTR) &szTemp, 128);
  241.             while (uFiles){
  242.                 DragQueryFile (hDrop, uFiles-1, (LPTSTR) &szTemp, 128);
  243.                 if(uType == NUKE_NOW)
  244.                     DeleteFile ( ( LPSTR )&szTemp ) ;
  245.                 else
  246.                     SendMessage (hEditWnd, LB_ADDSTRING, 0, (LPARAM)(LPSTR)&szTemp);            
  247.                 uFiles--;}
  248.             DragFinish (hDrop);
  249.             break;
  250.         case WM_SIZE:
  251.             MoveWindow ( hEditWnd, 0, 47, LOWORD ( lParam ), HIWORD ( lParam ) - 47, TRUE ) ;
  252.             break;
  253.         case WM_SETFOCUS:
  254.             SetFocus(hEditWnd);
  255.             break;
  256.         case WM_QUERYENDSESSION:
  257.             if (uType == NUKE_LATER){
  258.                 lResult = SendMessage(hEditWnd, LB_GETCOUNT, 0, 0);
  259.                 while (lResult){
  260.                     SendMessage(hEditWnd, LB_GETTEXT, 0, (LPARAM)(LPCTSTR)&szTemp);
  261.                     SendMessage(hEditWnd, LB_DELETESTRING, 0, 0);
  262.                     DeleteFile((LPSTR)&szTemp);
  263.                     lResult--;}
  264.                 bChanges=FALSE;}
  265.             if (bChanges){
  266.                 ShowWindow (hWnd, SW_RESTORE);
  267.                 MessageBox(hWnd, "There are still Files in the Trash", "Files Pending", MB_OK);
  268.                 return (FALSE);}
  269.             wsprintf ( szTemp, "%i", uType-1000);
  270.             WritePrivateProfileString ( ( LPCSTR ) & szUserName, "NukeType", (LPCTSTR) & szTemp, "Solution.ini");
  271.             return (TRUE);
  272.             break;
  273.         case WM_CLOSE :
  274.             if (uType == NUKE_LATER){
  275.                 lResult = SendMessage(hEditWnd, LB_GETCOUNT, 0, 0);
  276.                 while (lResult){
  277.                     SendMessage(hEditWnd, LB_GETTEXT, 0, (LPARAM)(LPCTSTR)&szTemp);
  278.                     SendMessage(hEditWnd, LB_DELETESTRING, 0, 0);
  279.                     DeleteFile((LPSTR)&szTemp);
  280.                     lResult--;}
  281.                 bChanges=FALSE;}
  282.             if (bChanges){
  283.                 ShowWindow (hWnd, SW_RESTORE);
  284.                 MessageBox(hWnd, "There are still Files in the Trash", "Files Pending", MB_OK);
  285.                 return (FALSE);}
  286.             wsprintf ( szTemp, "%i", uType);
  287.             WritePrivateProfileString ( ( LPCSTR ) & szUserName, "NukeType", (LPCTSTR) & szTemp, "Solution.ini");
  288.             DestroyWindow ( hWnd ) ;
  289.             break ;
  290.         case WM_DESTROY :
  291.             PostQuitMessage ( 0 ) ;
  292.             break ;
  293.         default :
  294.             return ( DefWindowProc ( hWnd, message, wParam, lParam ) ) ; }
  295.     return ( 0 ) ;
  296. }
  297.  
  298. BOOL FAR PASCAL About ( hDlg, message, wParam, lParam )
  299. HWND hDlg ;
  300. unsigned message ;
  301. WORD wParam ;
  302. LONG lParam ;
  303. {    switch ( message ) {
  304.         case WM_INITDIALOG :
  305.             return ( TRUE ) ;
  306.         case WM_COMMAND :
  307.             if ( wParam == IDOK || wParam == IDCANCEL ) {
  308.                 EndDialog( hDlg, TRUE ) ;
  309.                 return ( TRUE ) ; }
  310.             return ( TRUE ) ; }
  311.     return ( FALSE ) ;
  312. }
  313.